{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "652ab078",
   "metadata": {},
   "source": [
    "# SVM实验（MNIST & CIFAR-10）\n",
    "\n",
    "本实验将使用支持向量机（SVM）模型对MNIST和CIFAR-10数据集进行分类任务，分析其表现并进行可视化。"
   ]
  },
  {
   "cell_type": "code",
   "id": "c20ba8a1",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:42:12.593346Z",
     "start_time": "2025-05-22T14:42:08.619382Z"
    }
   },
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from sklearn.svm import SVC\n",
    "from sklearn.preprocessing import StandardScaler\n",
    "from sklearn.metrics import accuracy_score, confusion_matrix\n",
    "import torchvision\n",
    "import torchvision.transforms as transforms"
   ],
   "outputs": [],
   "execution_count": 1
  },
  {
   "cell_type": "markdown",
   "id": "61b0caf0",
   "metadata": {},
   "source": [
    "## 加载数据集"
   ]
  },
  {
   "cell_type": "code",
   "id": "a27cde8f",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:42:13.872860Z",
     "start_time": "2025-05-22T14:42:12.593346Z"
    }
   },
   "source": [
    "def load_mnist():\n",
    "    transform = transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize((0.5,), (0.5,))\n",
    "    ])\n",
    "    trainset = torchvision.datasets.MNIST(root='./data', train=True, download=True, transform=transform)\n",
    "    testset = torchvision.datasets.MNIST(root='./data', train=False, download=True, transform=transform)\n",
    "    return trainset, testset\n",
    "\n",
    "def load_cifar10():\n",
    "    transform = transforms.Compose([\n",
    "        transforms.ToTensor(),\n",
    "        transforms.Normalize((0.5, 0.5, 0.5), (0.5, 0.5, 0.5))\n",
    "    ])\n",
    "    trainset = torchvision.datasets.CIFAR10(root='./data', train=True, download=True, transform=transform)\n",
    "    testset = torchvision.datasets.CIFAR10(root='./data', train=False, download=True, transform=transform)\n",
    "    return trainset, testset\n",
    "\n",
    "def dataset_to_numpy(dataset, flatten=True):\n",
    "    X = []\n",
    "    y = []\n",
    "    for img, label in dataset:\n",
    "        arr = img.numpy()\n",
    "        if flatten:\n",
    "            arr = arr.flatten()\n",
    "        else:\n",
    "            arr = arr.transpose(1, 2, 0)\n",
    "        X.append(arr)\n",
    "        y.append(label)\n",
    "    X = np.array(X)\n",
    "    y = np.array(y)\n",
    "    return X, y\n",
    "\n",
    "mnist_train, mnist_test = load_mnist()\n",
    "cifar_train, cifar_test = load_cifar10()\n",
    "print(f\"MNIST训练集样本数: {len(mnist_train)}，测试集样本数: {len(mnist_test)}\")\n",
    "print(f\"CIFAR-10训练集样本数: {len(cifar_train)}，测试集样本数: {len(cifar_test)}\")"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST训练集样本数: 60000，测试集样本数: 10000\n",
      "CIFAR-10训练集样本数: 50000，测试集样本数: 10000\n"
     ]
    }
   ],
   "execution_count": 2
  },
  {
   "cell_type": "markdown",
   "id": "317451f2",
   "metadata": {},
   "source": [
    "## 数据预处理"
   ]
  },
  {
   "cell_type": "code",
   "id": "f8406fc4",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:42:24.848069Z",
     "start_time": "2025-05-22T14:42:13.993568Z"
    }
   },
   "source": [
    "# MNIST\n",
    "X_train_m, y_train_m = dataset_to_numpy(mnist_train)\n",
    "X_test_m, y_test_m = dataset_to_numpy(mnist_test)\n",
    "# CIFAR-10\n",
    "X_train_c, y_train_c = dataset_to_numpy(cifar_train)\n",
    "X_test_c, y_test_c = dataset_to_numpy(cifar_test)\n",
    "# 只取部分样本\n",
    "n_samples = 2000  # SVM较慢，减少样本数\n",
    "X_train_m, y_train_m = X_train_m[:n_samples], y_train_m[:n_samples]\n",
    "X_test_m, y_test_m = X_test_m[:500], y_test_m[:500]\n",
    "X_train_c, y_train_c = X_train_c[:n_samples], y_train_c[:n_samples]\n",
    "X_test_c, y_test_c = X_test_c[:500], y_test_c[:500]\n",
    "# 标准化\n",
    "scaler_m = StandardScaler().fit(X_train_m)\n",
    "X_train_m = scaler_m.transform(X_train_m)\n",
    "X_test_m = scaler_m.transform(X_test_m)\n",
    "scaler_c = StandardScaler().fit(X_train_c)\n",
    "X_train_c = scaler_c.transform(X_train_c)\n",
    "X_test_c = scaler_c.transform(X_test_c)"
   ],
   "outputs": [],
   "execution_count": 3
  },
  {
   "cell_type": "markdown",
   "id": "aa129c6d",
   "metadata": {},
   "source": [
    "## SVM模型训练与评估"
   ]
  },
  {
   "cell_type": "code",
   "id": "57e8338f",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:42:29.585686Z",
     "start_time": "2025-05-22T14:42:24.861735Z"
    }
   },
   "source": [
    "def train_and_evaluate(model, X_train, y_train, X_test, y_test):\n",
    "    model.fit(X_train, y_train)\n",
    "    y_pred = model.predict(X_test)\n",
    "    acc = accuracy_score(y_test, y_pred)\n",
    "    cm = confusion_matrix(y_test, y_pred)\n",
    "    return acc, cm, y_pred\n",
    "\n",
    "# MNIST\n",
    "svm_mnist = SVC()\n",
    "acc_m, cm_m, y_pred_m = train_and_evaluate(svm_mnist, X_train_m, y_train_m, X_test_m, y_test_m)\n",
    "print(f\"MNIST SVM准确率: {acc_m:.3f}\")\n",
    "# CIFAR-10\n",
    "svm_cifar = SVC()\n",
    "acc_c, cm_c, y_pred_c = train_and_evaluate(svm_cifar, X_train_c, y_train_c, X_test_c, y_test_c)\n",
    "print(f\"CIFAR-10 SVM准确率: {acc_c:.3f}\")"
   ],
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "MNIST SVM准确率: 0.886\n",
      "CIFAR-10 SVM准确率: 0.374\n"
     ]
    }
   ],
   "execution_count": 4
  },
  {
   "cell_type": "markdown",
   "id": "6115080c",
   "metadata": {},
   "source": [
    "## 可视化分析"
   ]
  },
  {
   "cell_type": "code",
   "id": "880bdf39",
   "metadata": {
    "ExecuteTime": {
     "end_time": "2025-05-22T14:42:29.783680Z",
     "start_time": "2025-05-22T14:42:29.597518Z"
    }
   },
   "source": [
    "# 准确率柱状图\n",
    "plt.figure(figsize=(5,4))\n",
    "plt.bar(['MNIST', 'CIFAR-10'], [acc_m, acc_c])\n",
    "plt.ylabel('Accuracy')\n",
    "plt.title('SVM在不同数据集上的准确率')\n",
    "plt.show()\n",
    "# 混淆矩阵\n",
    "fig, axes = plt.subplots(1,2, figsize=(12,5))\n",
    "axes[0].imshow(cm_m, cmap=plt.cm.Blues)\n",
    "axes[0].set_title('MNIST 混淆矩阵')\n",
    "axes[1].imshow(cm_c, cmap=plt.cm.Blues)\n",
    "axes[1].set_title('CIFAR-10 混淆矩阵')\n",
    "for ax in axes:\n",
    "    ax.set_xlabel('Predicted')\n",
    "    ax.set_ylabel('True')\n",
    "plt.tight_layout()\n",
    "plt.show()"
   ],
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 22312 (\\N{CJK UNIFIED IDEOGRAPH-5728}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19981 (\\N{CJK UNIFIED IDEOGRAPH-4E0D}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 21516 (\\N{CJK UNIFIED IDEOGRAPH-540C}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25968 (\\N{CJK UNIFIED IDEOGRAPH-6570}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 25454 (\\N{CJK UNIFIED IDEOGRAPH-636E}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38598 (\\N{CJK UNIFIED IDEOGRAPH-96C6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 19978 (\\N{CJK UNIFIED IDEOGRAPH-4E0A}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30340 (\\N{CJK UNIFIED IDEOGRAPH-7684}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 20934 (\\N{CJK UNIFIED IDEOGRAPH-51C6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30830 (\\N{CJK UNIFIED IDEOGRAPH-786E}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 29575 (\\N{CJK UNIFIED IDEOGRAPH-7387}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 500x400 with 1 Axes>"
      ],
      "image/png": "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ihQpIs2aNZOoqKh0r12yZIm0atVK7rvvPnO0adPGej0AAPk6KNesWSOjRo2SsLAwiYmJkXr16klwcLDEx8e7vH737t3Sp08f2bVrl0RGRkqVKlWkXbt2cubMmVwvOwDA87k9KGfPni0DBw6UkJAQqVWrlixatEiKFSsmERERLq9fsWKFDBkyROrXry81a9aUDz74QJKSkmTHjh25XnYAgOdza1AmJCRIdHS0aT5NKVCBAuax1hYz4vr163L79m0pU6aMy+dv3bolV65ccToAAMgXQXnhwgVJTEyUChUqOJ3Xx+fOncvQa4wePVoqV67sFLapTZs2Tfz9/VMObaoFACDfNL1mxfTp02X16tWyceNGMxDIldDQULl8+XLKERsbm+vlBADkX4Xc+c0DAgKkYMGCEhcX53ReH1esWNF676xZs0xQbt++XR577LF0r/Pz8zMHAAD5rkbp6+srjRo1chqI4xiY06JFi3TvmzlzpkyZMkW2bt0qjRs3zqXSAgC8kVtrlEqnhvTv398EXtOmTSU8PFyuXbtmRsGqfv36SWBgoOlrVDNmzJCJEyfKypUrzdxLR19miRIlzAEAgEcFZa9eveT8+fMm/DT0dNqH1hQdA3xOnTplRsI6LFy40IyW7dGjh9Pr6DzMt99+O9fLDwDwbG4PSjVs2DBzpLfAQGonT57MpVIBAJDPR70CAJDTCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAAAsCEoAACwISgAALAhKAADyelAuWLBAgoKCpEiRItKsWTOJioqyXr927VqpWbOmub5u3bqyZcuWXCsrAMC7uD0o16xZI6NGjZKwsDCJiYmRevXqSXBwsMTHx7u8fu/evdKnTx8ZMGCAfP/999KtWzdzHDx4MNfL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"
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\13306\\AppData\\Local\\Temp\\ipykernel_14476\\2676545603.py:16: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\13306\\AppData\\Local\\Temp\\ipykernel_14476\\2676545603.py:16: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\13306\\AppData\\Local\\Temp\\ipykernel_14476\\2676545603.py:16: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "C:\\Users\\13306\\AppData\\Local\\Temp\\ipykernel_14476\\2676545603.py:16: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) DejaVu Sans.\n",
      "  plt.tight_layout()\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28151 (\\N{CJK UNIFIED IDEOGRAPH-6DF7}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 28102 (\\N{CJK UNIFIED IDEOGRAPH-6DC6}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 30697 (\\N{CJK UNIFIED IDEOGRAPH-77E9}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n",
      "D:\\machineLearning\\venv\\Lib\\site-packages\\IPython\\core\\pylabtools.py:170: UserWarning: Glyph 38453 (\\N{CJK UNIFIED IDEOGRAPH-9635}) missing from font(s) DejaVu Sans.\n",
      "  fig.canvas.print_figure(bytes_io, **kw)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "<Figure size 1200x500 with 2 Axes>"
      ],
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABBUAAAHqCAYAAABbfXZsAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjMsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvZiW1igAAAAlwSFlzAAAPYQAAD2EBqD+naQAAL2BJREFUeJzt3QucXeO5P/BnkpGL3EQQVJAqIk3cL8U5LnVtVamWal1SbXOUICgldVyD4JRqqetpcdS9jlIt/g7qUndRpYeoUk2p0INEkuY6+/95V8/MyUgiM+8kWWtnvt/PZ5nsvdfe+7EymfXMb7/vuxpqtVotAAAAANqpS3ufAAAAAJAIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgUAAAAgi1ABAAAAyCJUAAAAALIIFQAAAIAsQgVog6uvvjoaGhqK7ZFHHpnv8VqtFoMGDSoe/9znPtfqsebnnX/++Qt93aeffrrlvtNOO624729/+1urfX/xi1/E9ttvH6usskosv/zy8fGPfzz222+/uPvuu4vHd9hhh5b3+qgtvT4AwEf54x//GIceemjRb/To0SP69u0b2267bfzgBz+Iv//97y37rb322gvtfT68rbrqqq32e//994vXTo+9+OKLC6zja1/7WqvX6N69e6y33npxyimnxIwZM9r0//Lkk0/G4YcfHptttlkst9xyxet8lB//+MexwQYbFLWtu+66cdFFF7XpfaCzaiy7AKgn6eRy/fXXxz/90z+1uv/BBx+Mv/zlL8WJbmH+7d/+LQ477LAiEGiv733ve3H88ccXocKYMWOK13jllVfiv/7rv+LGG2+M3XffPU466aT45je/2fKcp556Kn74wx/Gd7/73eLE2GzDDTdc4Htccsklceyxx0Zj44J/LKy00krxpz/9qbT9AICl45e//GXsu+++RV9z8MEHx7Bhw2LWrFnFByupH/n9738fV1xxxUe+xi677FI8d149e/ZsdfuWW25pCRuuu+66OPPMMxf4WqmOf//3fy/+PHny5Lj99ttj7NixRfCRnrcov/rVr4rnpx4ohSQvv/zyQve9/PLL41vf+lZ88YtfLPqThx9+OI466qiYPn16nHDCCQt9Xjomm2yySXTr1m2Bj6fjl4KTFISUsd8666yz0Nqhw2rAIl111VW19M9ln332qa200kq12bNnt3p85MiRtc0226y21lpr1fbYY49Wj6XnbbzxxsXX888/f4Gv+9RTT7Xcd+qppxb3vfPOO8Xt9F59+/at7bLLLgusbdKkSQu8/5Zbbile54EHHmjT/+NFF11UO+mkkxb42N///vfaxz72sVL3AwCWvFdffbXWu3fv2pAhQ2pvvvnmfI//4Q9/qF144YUttxfW+4waNWqR77XddtsVvdUxxxxTGzx48AL3GTFiRK1Xr16t7mtqaqp96lOfqjU0NNTeeuutRb5P2mf69OnFn1NdC/sVKO0zYMCA+f5/DjjggKKGd999d6Hv8fzzz9e23XbbhT6+1VZbFceurP1gSTL9AdrhK1/5SvzP//xP3Hvvva0S4J/97Gfx1a9+daHPS8MFP/3pT8d5553XashgW6RpEFOmTCleY0HSdAgAgMUh9SpTp04tpgCsttpq8z3+iU98IkaPHt3h9/nzn/9cjALYf//9i+21116LRx99tE3PTaMb0qjRlF+8+uqri9x/4MCB842SWJAHHnig6PPSVIl5jRo1KqZNm1aM4ADmJ1SAdkjzBrfeeuu44YYbWu676667iqF46YT4UdJaBpMmTYpLL720Xe+ZQoN0IkxrKrz77rvZtQMALErqN9IUgW222aZDr5OG5acPRubdZs6c2fJ46qV69epVrMew5ZZbFsPz2zKVoVnz1Mj+/fvH4vLss88WXzfffPNW96e1GLp06dLyONCaUAHaKY1I+PnPf94y4iCdANNaB6uvvvpHPu+f//mfY8cddyzWVmjPaIV0EkvzF5955plYc80147Of/WycffbZMX78+A7/vwAANEsjI994440YPnx4h18rjXRYeeWVW23zfiiT+qe99tqrZQTBl7/85bj55ptjzpw5C3y95mAiraOQFr++9dZbi7Ue1l9//Vhc/vrXv0bXrl3nGwWa1isYMGBAvPnmm4vtvWBZIlSAdkpXXEihwJ133hkffPBB8fWjpj58eLTCW2+9FZdddlm73vP0008vFohMC/Hcc889xaKMKTXfdNNNF7paMgBAe0OFpE+fPh1+rRQYpOmi82677bZb8djvfve7eP7554tppc3Sn1NokPqcD0tTD5qDiTT94rjjjiumhaYFGxd1JYf2SP3dwhY8TIt1t3cKK3QWrv4A7ZROaDvvvHPxS35aCXju3LnxpS99qU3P3W677YrR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YdmlAACUTm8EQL0oPVSYOnVqHHDAAXHllVdG//79yy4HAKBUeiMA6knpocKoUaNijz32iJ133nmR+86cOTOmTJnSagMAWJbojQCoJ41lvvmNN94Y48ePL4b4tcW4cePi9NNPX+J1AQCUQW8EQL0pbaTCxIkTY/To0XHddddFjx492vScMWPGxOTJk1u29BoAAMsCvREA9ai0kQrPPPNMvP3227Hpppu23Dd37tx46KGH4uKLLy6G83Xt2rXVc7p3715sAADLGr0RAPWotFBhp512iueff77VfYccckgMGTIkTjjhhPlOmgAAyzK9EQD1qLRQoU+fPjFs2LBW9/Xq1SsGDBgw3/0AAMs6vREA9aj0qz8AAAAA9anUqz982K9//euySwAAqAy9EQDL5EiFhx9+OA488MDYeuut44033ijuu/baa+ORRx5Z3PUBAFSe3giAzqrdocKtt94au+22W/Ts2TOeffbZYiXiJF3G6Oyzz14SNQIAVJbeCIDOrN2hwplnnhmXXXZZXHnllbHccsu13L/tttvG+PHjF3d9AACVpjcCoDNrd6gwYcKE2G677ea7v1+/fvH+++8vrroAAOqC3giAzqzdocKqq64ar7zyynz3pzmDH//4xxdXXQAAdUFvBEBn1u5QYeTIkTF69Oh44oknoqGhId5888247rrr4rjjjovDDjtsyVQJAFBReiMAOrN2X1LyxBNPjKampthpp51i+vTpxXC/7t27FyfOI488cslUCQBQUXojADqzdocKKYE/6aST4vjjjy+G+k2dOjWGDh0avXv3XjIVAgBUmN4IgM6s3aFCs27duhUnTAAA9EYAdE7tDhV23HHHIpFfmPvvv7+jNQEA1A29EQCdWbtDhY033rjV7dmzZ8dvf/vbeOGFF2LEiBGLszYAgMrTGwHQmbU7VPj+97+/wPtPO+20Yg4hAEBnojcCoDNr9yUlF+bAAw+Mn/zkJ4vr5QAA6preCIDOIHuhxg977LHHokePHlGGuU21Yquirl0WPseyKro1LrZsaYmo6t/tvJ46bZeosk9f8FBU3f3Hbld2CXTyn4dVr4/6U2ZvtFxjl8qf36ts0Ao9o8p++szrUXU7rzMwquz+lydF1a07oE/ZJdS9qTPmRJWt2LtbVFljU7clEyrss88+rW7XarX461//Gk8//XScfPLJ7X05AIC6pjcCoDNrd6jQr1+/Vre7dOkS66+/fpxxxhmx6667Ls7aAAAqT28EQGfWrlBh7ty5ccghh8Tw4cOjf//+S64qAIA6oDcCoLNr12S7rl27Fon7+++/v+QqAgCoE3ojADq7dq/gM2zYsHj11VeXTDUAAHVGbwRAZ9buUOHMM8+M4447Lu68885iEaIpU6a02gAAOhO9EQCdWZvXVEiLDX3729+Oz372s8Xtz3/+89HQ0NBqpeN0O80tBABY1umNAKAdocLpp58e3/rWt+KBBx5YshUBANQBvREAtCNUSGl7sv322y/JegAA6oLeCADauabCvEP6AAA6O70RAJ1dm0cqJOutt94iT57vvvtuR2sCAKgLeiMAOrvG9s4d7Nev35KrBgCgjuiNAOjs2hUq7L///rHKKqssuWoAAOqI3giAzq7NayqYMwgA8H/0RgDQjlCheYVjAAD0RgDQrukPTU1NjhgAwP/SGwFAOy8pCQAAANBMqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQJbGvKexLPn7rLlRZf2WX67sEurevUf/c1TdoTf/Lqrs8v02LLuEute1S0NUWdXrg/aYPacpZs1piirq1lj9z7Sqeuya7bfRoKi6R//4P1Fln15vYFTd4ENviiqb8KN9o+p696j2r7tTZ8yJKpvWxvqq/1MdAAAAqCShAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAADUZ6jwxhtvxIEHHhgDBgyInj17xvDhw+Ppp58uuywAgFLojQCoJ41lvvl7770X2267bey4445x1113xcorrxx/+MMfon///mWWBQBQCr0RAPWm1FDh3HPPjUGDBsVVV13Vct/gwYPLLAkAoDR6IwDqTanTH+64447YfPPNY999941VVlklNtlkk7jyyisXuv/MmTNjypQprTYAgGWF3giAelNqqPDqq6/GpZdeGuuuu27cc889cdhhh8VRRx0V11xzzQL3HzduXPTr169lS0k+AMCyQm8EQL0pNVRoamqKTTfdNM4+++wiif+Xf/mXGDlyZFx22WUL3H/MmDExefLklm3ixIlLvWYAgCVFbwRAvSk1VFhttdVi6NChre7bYIMN4s9//vMC9+/evXv07du31QYAsKzQGwFQb0oNFdLqxhMmTGh138svvxxrrbVWaTUBAJRFbwRAvSk1VDjmmGPi8ccfL4b4vfLKK3H99dfHFVdcEaNGjSqzLACAUuiNAKg3pYYKW2yxRdx2221xww03xLBhw2Ls2LFx4YUXxgEHHFBmWQAApdAbAVBvGssu4HOf+1yxAQCgNwKgvpQ6UgEAAACoX0IFAAAAIItQAQAAAMgiVAAAAACyCBUAAACALEIFAAAAIItQAQAAAMgiVAAAAACyCBUAAACALEIFAAAAIItQAQAAAMgiVAAAAACyCBUAAACALI2xDOjapaHYyDO3qVZ2CSxh9fDv4/L9Nowq++wlj0bV/erwbaLKqv6zpur1QXvMmtNUbFU0dcacqLrePardIk+aPCOqbsjAPlFl706dFVX30Nl7RpU98uo7UXWfXm9gVNnUiv88nDqzbfUZqQAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJBFqAAAAABkESoAAAAAWYQKAAAAQBahAgAAAJClMZYBc5tqxUae3j2WiW+DUvn+67iuXRqiyn51+DZRdf9610tRZafssl5UmX/HLEveeHd69JpdzfP7oAHLR9WtukKPqLJZc5qi6qpeY9XrS1ZdoXdUWT38Wx649VFRZb+7+7yosjlz2/bvxEgFAAAAIItQAQAAAMgiVAAAAACyCBUAAACALEIFAAAAIItQAQAAAMgiVAAAAACyCBUAAACALEIFAAAAIItQAQAAAMgiVAAAAACyCBUAAACALEIFAAAAIItQAQAAAMgiVAAAAADqL1SYO3dunHzyyTF48ODo2bNnrLPOOjF27Nio1WpllgUAUAq9EQD1prHMNz/33HPj0ksvjWuuuSY++clPxtNPPx2HHHJI9OvXL4466qgySwMAWOr0RgDUm1JDhUcffTT22muv2GOPPYrba6+9dtxwww3x5JNPllkWAEAp9EYA1JtSpz9ss802cd9998XLL79c3H7uuefikUceic985jML3H/mzJkxZcqUVhsAwLJCbwRAvSl1pMKJJ55YnPyGDBkSXbt2LeYRnnXWWXHAAQcscP9x48bF6aefvtTrBABYGvRGANSbUkcq3HzzzXHdddfF9ddfH+PHjy/mD37ve98rvi7ImDFjYvLkyS3bxIkTl3rNAABLit4IgHpT6kiF448/vkjk999//+L28OHD4/XXXy9S9xEjRsy3f/fu3YsNAGBZpDcCoN6UOlJh+vTp0aVL6xLSUL+mpqbSagIAKIveCIB6U+pIhT333LOYJ7jmmmsWl0169tln44ILLoivf/3rZZYFAFAKvREA9abUUOGiiy6Kk08+OQ4//PB4++23Y/XVV49DDz00TjnllDLLAgAohd4IgHpTaqjQp0+fuPDCC4sNAKCz0xsBUG9KXVMBAAAAqF9CBQAAACCLUAEAAADIIlQAAAAAsggVAAAAgCxCBQAAACCLUAEAAADIIlQAAAAAsggVAAAAgCxCBQAAACCLUAEAAADIIlQAAAAAsggVAAAAgCyNsQzo2qWh2Mgzt6lWdgl1r+rHsFuj/LCjZs1piqo7aad1o8p2vuChqLK5M6aVXQIsNuut3jf69u0bVfTHSVOj6nr3qHaLPHXGnKi6FXt3iyqrh/N61WucNHlGVN09N50RVfap79weVVabNb1N+/lNAwAAAMgiVAAAAACyCBUAAACALEIFAAAAIItQAQAAAMgiVAAAAACyCBUAAACALEIFAAAAIItQAQAAAMgiVAAAAACyCBUAAACALEIFAAAAIItQAQAAAMgiVAAAAACyCBUAAACALEIFAAAAIItQAQAAAMgiVAAAAACyCBUAAACALEIFAAAAIItQAQAAAMgiVAAAAACyCBUAAACALEIFAAAAIItQAQAAAMgiVAAAAACyCBUAAACALEIFAAAAIItQ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AAAAkEWoAAAAAGQRKgAAAABZhAoAAABAFqECAAAAkEWoAAAAAGQRKgAAAABZhAoAAABAFqECLGO+9rWvxd57791ye4cddoijjz56qdfx61//OhoaGuL9999f6u8NANBMbwRLllABluIJLZ1I0tatW7f4xCc+EWeccUbMmTNnib7vf/7nf8bYsWPbtK+THQCwtOiNYNnQWHYB0JnsvvvucdVVV8XMmTPjV7/6VYwaNSqWW265GDNmTKv9Zs2aVZxcF4cVV1xxsbwOAMDipjeC+mekAixF3bt3j1VXXTXWWmutOOyww2LnnXeOO+64o2VY3llnnRWrr756rL/++sX+EydOjP322y9WWGGF4gS41157xZ/+9KeW15s7d24ce+yxxeMDBgyI73znO1Gr1Vq954eH+KWT9gknnBCDBg0q6kmfCvz4xz8uXnfHHXcs9unfv3+Ryqe6kqamphg3blwMHjw4evbsGRtttFH87Gc/a/U+qRFYb731isfT68xbJwDAguiNoP4JFaBE6SSTkvfkvvvuiwkTJsS9994bd955Z8yePTt222236NOnTzz88MPxm9/8Jnr37l0k+s3POf/88+Pqq6+On/zkJ/HII4/Eu+++G7fddttHvufBBx8cN9xwQ/zwhz+MF198MS6//PLiddOJ9NZbby32SXX89a9/jR/84AfF7XTS/I//+I+47LLL4ve//30cc8wxceCBB8aDDz7YcoLfZ599Ys8994zf/va38c1vfjNOPPHEJXz0AIBljd4I6lANWCpGjBhR22uvvYo/NzU11e69995a9+7da8cdd1zx2MCBA2szZ85s2f/aa6+trb/++sW+zdLjPXv2rN1zzz3F7dVWW6123nnntTw+e/bs2hprrNHyPsn2229fGz16dPHnCRMmpKi+eO8FeeCBB4rH33vvvZb7ZsyYUVt++eVrjz76aKt9v/GNb9S+8pWvFH8eM2ZMbejQoa0eP+GEE+Z7LQCAZnojWDZYUwGWopSyp+Q7Je1p2NxXv/rVOO2004r5g8OHD281V/C5556LV155pUjj5zVjxoz44x//GJMnTy4S86222qrlscbGxth8883nG+bXLCXlXbt2je23377NNacapk+fHrvsskur+9MnAptssknx55Tqz1tHsvXWW7f5PQCAzklvBPVPqABLUZpPd+mllxYnyDQ/MJ3omvXq1avVvlOnTo3NNtssrrvuuvleZ+WVV84eUtheqY7kl7/8ZXzsYx9r9ViadwgAkEtvBPVPqABLUTo5psV/2mLTTTeNm266KVZZZZXo27fvAvdZbbXV4oknnojtttuuuJ0uwfTMM88Uz12QlPinTwHSfL+0ENKHNX8akBY5ajZ06NDiBPnnP/95oSn+BhtsUCyqNK/HH3+8Tf+fAEDnpTeC+mehRqioAw44IFZaaaViVeO0GNFrr71WXCv5qKOOir/85S/FPqNHj45zzjknfv7zn8dLL70Uhx9++EdeR3nttdeOESNGxNe//vXiOc2vefPNNxePp5WX08rGaSjiO++8UyTxaYjhcccdVyxAdM011xTDC8ePHx8XXXRRcTv51re+FX/4wx/i+OOPLxYyuv7664tFkgAAFhe9EVSTUAEqavnll4+HHnoo1lxzzWL14JR4f+Mb3yjmDTan89/+9rfjoIMOKk6GaZ5eOsl94Qtf+MjXTUMMv/SlLxUn2SFDhsTIkSNj2rRpxWNpCN/pp59erE48cODAOOKII4r7x44dGyeffHKx0nGqI62ynIb8pcsoJanGtDpyOhmnSyqllZDPPvvsJX6MAIDOQ28E1dSQVmssuwgAAACg/hipAAAAAGQRKgAAAABZhAoAAABAFqECAAAAkEWoAAAAAGQRKgAAAABZhAoAAABAFqECAAAAkEWoAAAAAGQRKgAAAABZhAoAAABAFqECAAAAEDn+P1/vYsfrZIStAAAAAElFTkSuQmCC"
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "execution_count": 5
  }
 ],
 "metadata": {
  "language_info": {
   "name": "python"
  },
  "kernelspec": {
   "name": "python3",
   "language": "python",
   "display_name": "Python 3 (ipykernel)"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
